There are a number of known design patterns that are available for the PHP language. Some of them are explained below-
- Builder: How a composite object gets created
- Factory Method: A subclass of an object that is instantiated
- Singleton: The sole instance of a class
1. Singleton
This design pattern is very common and allows you to access only one single instance of the class and provide a global access point to that instance.
Example:
<?php
class Singleton_demo {
public static function data() {
static $var = null;
if (null === $var) {
$var = new static();
}
return $var;
}
protected function __construct() {
}
private function __clone() {
}
private function __wakeup() {
}
}
class SingletonChild extends Singleton_demo {
}
$obj = Singleton_demo::getInstance();
var_dump($obj === Singleton_demo::getInstance());
$anotherObj = SingletonChild::data();
var_dump($anotherObj === Singleton_demo::data());
var_dump($anotherObj === SingletonChild::data());
?>
Output:
bool(true) bool(false) bool(true)
2. Factory
This design pattern works exactly as its name suggests. This pattern will work as the real factory ob the object instances. Suppose we know that a factory creates some types of product but we are not aware of how they do it but there is a universal way of doing it.
Example:
<?php
class Subject {
private $topic;
private $teacher;
public function __construct($topic_1, $teacher_1) {
$this->topic = $topic_1;
$this->teacher = $teacher_1;
}
public function getdata() {
return $this->topic . ' ' . $this->teacher;
}
}
class Subject_demo {
public static function create($topic_1, $teacher_1) {
return new Subject($topic_1, $teacher_1);
}
}
$CS = Subject_demo::create(‘CS, ‘XXX’);
print_r($CS>getdata());
class Subject{
private $topic;
private $teacher;
public function _construct($topic_1, $teacher_1) {
$this->topic = $topic_1;
$this->teacher = $teacher_1;
}
public function getdata() {
return $this->topic . ' ' . $this->teacher;
}
}
class Subject_Demo{
public static function create($topic_1, $teacher_1) {
return new Subject($topic_1, $teacher_1);
}
}
$CS = Subject_demo::create(‘CS’, ‘XXX’);
print_r($CS>getdata());
?>
Output:
CS XXX CS XXX
3. Strategy
This design pattern is an algorithm based where we encapsulate some algorithms and allow the client class to create an instance for a particular algorithm without having knowledge of the actual implementation.
Example:
<?php $elements_demo = array( array( 'id' => 2, 'name' => ‘XXX’, ), array( 'id' => 1, ‘name’=> ‘YYY’ ) ); $collection_demo = new ObjectCollection($elements_demo); $collection_demo->setComparator(new IdComparator()); $collection_demo->sort(); echo "Sorting by id:\n"; print_r($collection_demo->elements_demo); $collection_demo->setComparator(new DateComparator()); $collection_demo->sort(); echo "Sortin by name:\n"; print_r($collection_demo->elements_demo); ?>
People are also reading: